package _0_Xorm框架

//创建引擎组 EngineGroup 来实现对从数据库 (Master/Slave) 读写分离的支持
import (
	_ "github.com/go-sql-driver/mysql"
	"xorm.io/xorm"
)

var eg *xorm.EngineGroup

func main() {
	conns := []string{
		"mysql://root:123456@127.0.0.1:3306/go_db?sslmode=disable;", // 第一个默认是master
		"mysql://root:123456@127.0.0.1:3306/go_db?sslmode=disable;", // 第二个开始都是slave
		"mysql://root:123456@127.0.0.1:3306/go_db?sslmode=disable",
	}

	eg, err = xorm.NewEngineGroup("mysql", conns)
	if err != nil {

	}
	eg.Ping()
	//(1)随机访问负载策略
	xorm.NewEngineGroup("mysql", conns, xorm.RandomPolicy())

	//(2)权重随机访问负载策略 此时设置的test1数据库和test2数据库的随机访问权重为2和3
	xorm.NewEngineGroup("postgres", conns, xorm.WeightRandomPolicy([]int{2, 3}))

	//(3)轮询访问负载策略
	xorm.NewEngineGroup("postgres", conns, xorm.RoundRobinPolicy())

	//(4)权重轮询访问负载策略 此时设置的test1数据库和test2数据库的轮询访问权重为2和3
	xorm.NewEngineGroup("postgres", conns, xorm.WeightRoundRobinPolicy([]int{2, 3}))

	//(5)最小连接数访问负载策略
	xorm.NewEngineGroup("postgres", conns, xorm.LeastConnPolicy())

	//(6)通过实现 GroupPolicy 接口来实现自定义负载策略
	/*type GroupPolicy interface {
		Slave(*EngineGroup) *Engine
	}*/
}
